GitHub ↗ ← 返回

The Secrets of Windows Notifications.ass

Enderman/The Secrets of Windows Notifications.assASS共 89 条字幕
样式信息 (1)
Enderman-C
名称Enderman-C字体更纱黑体 SC字号115主色&H0000EAFF辅色&H000000FF描边色&H00000000背景色&H00000000粗体0斜体0下划线0删除线0水平缩放100垂直缩放100间距0角度0边框样式1描边1.6阴影0.8对齐2左边距0右边距0垂直边距20编码1
#10:00:00.840:00:05.79Enderman-C
{\fad(200,200)}翻译/压制/字幕制作:HAF半个水果
#20:00:06.410:00:10.41Enderman-C
{\fad(200,200)\pos(1925.334,645.333)}使用AI工具翻译,如有不准确的地方请在弹幕或评论区指正,谢谢!
#30:00:10.640:00:15.64Enderman-C
{\fad(200,200)\pos(1925.334,645.333)}翻译质量权威评价:原来25年就有小拉即用机翻糊弄人了
#40:00:06.290:00:11.48Enderman-C
{\fad(200,200)\pos(1928,2076)}Windows的通知是如何工作的?
#50:00:12.490:00:31.03Enderman-C
{\fad(200,200)\pos(1856,169.333)}大家好!Windows系统中的通知功能是个非常有趣的话题
#60:00:12.490:00:31.03Enderman-C
{\fad(200,200)\pos(1869.333,478.666)}我们早已习惯它们作为应用程序偶尔弹出的无状态气泡提醒
#70:00:31.830:00:38.83Enderman-C
{\fad(200,200)\move(1872,171.999,1872,-25.334,6736,6986)}不过,Windows的近期版本中包含了操作中心
#80:00:31.830:00:38.83Enderman-C
{\fad(200,200)\move(1874.666,469.333,1877.333,-24,6736,6986)}这在Windows Phone 8.1之前是不存在的。它已经问世11年了
#90:00:38.890:00:52.23Enderman-C
{\fad(200,200)\move(2000,2260,2000,1820,10,160)}不过,Windows的近期版本中包含了操作中心
#100:00:38.890:00:52.23Enderman-C
{\fad(200,200)\move(1986.667,2265.333,1992,2110.666,10,160)}这在Windows Phone 8.1之前是不存在的。它已经问世11年了
#110:00:52.830:01:06.36Enderman-C
{\fad(200,200)\pos(1984,1817.333)}如你所见,自Windows 8起,通知功能已变为有状态化设计
#120:00:52.830:01:06.36Enderman-C
{\fad(200,200)\pos(1976,2110.666)}即使超过预设的显示时限,只要未被手动滑除,用户仍可随时查看已接收的通知
#130:01:07.010:01:19.84Enderman-C
{\fad(200,200)\pos(1976,1817.333)}说实话,微软这次确实把少数几个功能做得相当到位
#140:01:07.010:01:19.84Enderman-C
{\fad(200,200)\pos(1978.667,2118.666)}操作中心是个非常棒的功能,完成得也很出色。该表扬的地方我绝不吝啬
#150:01:20.610:01:33.43Enderman-C
{\fad(200,200)\pos(1909.334,158.666)}那些气泡通知挺好看的,但没法往里面添加额外的控制元素
#160:01:20.610:01:33.43Enderman-C
{\fad(200,200)\pos(2309.334,475.999)}这玩意儿已经是过去式了,我更喜欢用弹窗提示。总之,咱们继续吧
#170:01:22.940:01:32.83Enderman-C
{\pos(2098.667,2078.667)}Windows通知已今非昔比!\N
你仍可通过注册表修改\N
在新版Windows系统中启用气泡通知功能
#180:01:36.590:01:49.01Enderman-C
{\fad(200,200)\pos(1922.667,177.332)}那么,这部分是视频的技术内容。“新”通知{\fs45\i1}(已经过去十年了){\r}是用XAML编写的
#190:01:36.590:01:49.01Enderman-C
{\fad(200,200)\pos(1869.334,467.999)}你可以从微软商店安装{\b1\c&HFFFFFF&}Notifications Visualizer{\r}来试用它们
#200:01:53.890:02:06.56Enderman-C
{\fad(200,200)\pos(1864.001,1819.999)}我已经在我的Windows 10系统上测试过几条示例通知
#210:01:53.890:02:06.56Enderman-C
{\fad(200,200)\pos(1829.334,2131.999)}通过编程方式运行toast通知可以通过多种方法实现
#220:02:07.210:02:19.78Enderman-C
{\fad(200,200)\pos(1928,1827.999)}有WinAPI的方式—Shell_NotifyIcon(),这是自Windows XP以来用于弹出气泡提示的函数
#230:02:07.210:02:19.78Enderman-C
{\fad(200,200)\pos(1877.334,2110.666)}它在最新的Windows系统上仍然有效。虽然可定制性不足,但能显示基本的通知
#240:02:20.230:02:32.84Enderman-C
{\fad(200,200)\pos(1925.334,1825.333)}COM方式 - IUserNotification和IUserNotification2接口也允许显示气泡通知
#250:02:20.230:02:32.84Enderman-C
{\fad(200,200)\pos(1904.001,2102.666)}后者自Vista起可用。上述两种触发气泡通知的方式均被保留以维持兼容性
#260:02:33.490:02:47.03Enderman-C
{\fad(200,200)\pos(1904.001,1830.666)}现代显示通知的方式是创建一个ToastNotificationManager对象
#270:02:33.490:02:47.03Enderman-C
{\fad(200,200)\pos(1906.668,2118.666)}然后照搬或遵循微软文档,因为只有上帝知道现在到底该怎么做了
#280:02:48.030:03:01.56Enderman-C
{\fad(200,200)\pos(1912.001,1817.333)}幸好,粘贴选项就在眼前!通知可视化工具本质上是一个Toast通知设计器
#290:02:48.030:03:01.56Enderman-C
{\fad(200,200)\pos(1930.668,2102.666)}完成XAML编辑后,可以将Toast导出为代码
#300:03:03.280:03:16.83Enderman-C
{\fad(200,200)\pos(1912.001,1833.333)}有多种语言可供选择。遗憾的是,看起来已经有一个竞争者
#310:03:03.280:03:16.83Enderman-C
{\fad(200,200)\pos(1901.334,2105.333)}在争夺ToastNotificationManager,但你继续使用应该没有问题
#320:03:17.930:03:29.33Enderman-C
{\fad(200,200)\pos(1978.667,1830.666)}很明显这是一团糟,就像Windows系统的多数情况一样。从技术上讲
#330:03:17.930:03:29.33Enderman-C
{\fad(200,200)\pos(1973.334,2107.999)}你现在应该能弹出通知了。但相比于我制作这个视频的真正目的,这点功能实在无趣
#340:03:30.230:03:49.53Enderman-C
{\fad(200,200)\pos(2008.001,1830.666)}拿出证据。我一开始就特别提到过,这些toast是有状态的
#350:03:30.230:03:49.53Enderman-C
{\fad(200,200)\pos(1994.667,2105.333)}它们一直以来都是如此。这意味着toast信息被储存在某处,这就是一个痕迹
#360:03:51.110:04:06.58Enderman-C
{\fad(200,200)\pos(1949.334,1820)}Windows推送通知服务(WNS)负责将通知传递并存储到设备上
#370:03:51.110:04:06.58Enderman-C
{\fad(200,200)\pos(1960.001,2108)}附带说明的是,Toast并非Windows上唯一的通知形式
#380:04:07.310:04:21.36Enderman-C
{\fad(200,200)\pos(1960.001,1828)}用户服务描述为Windows通知提供了分类
#390:04:07.310:04:21.36Enderman-C
{\fad(200,200)\pos(1928.001,2110.667)}“磁贴、吐司和原始”。 “原始”不是一个描述性的名称,“图标”会更好
#400:04:22.280:04:36.38Enderman-C
{\fad(200,200)\pos(1920.001,1825.334)}因此,除了传统的通知弹窗(toasts)外,动态磁贴(live tiles)和
#410:04:22.280:04:36.38Enderman-C
{\fad(200,200)\fs75\pos(1904.001,2081.334)}任务栏应用图标(taskbar application badges)也被视为通知形式,并以与弹窗相同的方式存储。这可能会产生大量信息
#420:04:37.190:04:51.29Enderman-C
{\fad(200,200)\pos(1912.001,1822.667)}Windows 10上最基本的动态磁贴示例。图标功能我没能轻易实现
#430:04:37.190:04:51.29Enderman-C
{\fad(200,200)\pos(1920.001,2100)}所以想象一下一个附带小计数器的通讯应用图标
#440:04:57.140:05:00.14Enderman-C
{\pos(2304,1809.333)}在x上关注Enderman!
#450:05:04.280:05:18.41Enderman-C
{\fad(200,200)\pos(1944.001,1825.333)}那么,Windows究竟把通知信息存储在哪里呢?
#460:05:04.280:05:18.41Enderman-C
{\fad(200,200)\pos(1952.001,2105.333)}首先,你可以在注册表的HKCU项下找到应用程序列表及最后时间戳记录
#470:05:19.040:05:33.16Enderman-C
{\fad(200,200)\pos(1944.001,1822.666)}你也可以通过该注册表项禁用特定系统应用的通知提示
#480:05:19.040:05:33.16Enderman-C
{\fad(200,200)\pos(1933.334,2113.333)}创建一个名为“Enabled”的DWORD值并将其设为0,不过这不是重点
#490:05:33.910:05:48.03Enderman-C
{\fad(200,200)\pos(1949.334,1836)}在PushNotifications下还能获取更多额外信息
#500:05:33.910:05:48.03Enderman-C
{\fad(200,200)\pos(1946.667,2121.333)}不仅如此,最重要的是你可以访问toast通知的内容
#510:05:48.860:06:02.94Enderman-C
{\fad(200,200)\pos(1898.667,1809.333)}通知内容存储在一个名为{\b1\c&HFFFFFF&}wpndatabase.db{\r}{\b1\c&HFFFFFF&}SQLite{\r}数据库中
#520:05:48.860:06:02.94Enderman-C
{\fad(200,200)\pos(1968,2113.333)}该数据库位于%localappdata%\Microsoft\Windows\ Notifications目录下
#530:06:04.280:06:18.41Enderman-C
{\fad(200,200)\pos(2018.667,1814.666)}数据库运行在WAL{\fs45\i1}(预写式日志){\r}模式下,因此我们多了两个额外文件:
#540:06:04.280:06:18.41Enderman-C
{\fad(200,200)\pos(2024,2102.666)}DB-SHM{\fs45\i1}(共享内存){\r}和DB-WAL——未完成事务日志
#550:06:19.410:06:33.51Enderman-C
{\fad(200,200)\pos(2042.667,1814.666)}有一个{\b1\c&HFFFFFF&}WPNIDM{\r}文件夹,里面包含了所有动态磁贴的元数据
#560:06:19.410:06:33.51Enderman-C
{\fad(200,200)\pos(1949.334,2118.666)}顺便说一下,正如你所见,其中还包括了通知附件。这些内容会被缓存一段时间
#570:06:34.190:06:47.08Enderman-C
{\fad(200,200)\pos(1906.667,1830.666)}从数据分析的角度来看,所有这些数据结合起来使得该文件夹
#580:06:34.190:06:47.08Enderman-C
{\fad(200,200)\pos(1896,2110.666)}尤其是其中的WAL文件——极具研究价值。你可以从中提取出未提交的数据
#590:06:48.580:07:01.44Enderman-C
{\fad(200,200)\pos(1920,1822.666)}现在,我们已经从Windows 10中获取了文件
#600:06:48.580:07:01.44Enderman-C
{\fad(200,200)\pos(1890.667,2113.333)}接下来让我们浏览数据库内容。你可以使用任何数据库查看工具,我这里用的是DataGrip
#610:07:21.540:07:34.43Enderman-C
{\fad(200,200)\pos(1909.334,1822.666)}数据库包含8个表,其中最重要的是
#620:07:21.540:07:34.43Enderman-C
{\fad(200,200)\pos(1869.334,2110.666)}Notification和NotificationData。这两个表存储了通知内容及其他相关信息
#630:07:40.360:07:56.74Enderman-C
{\fad(200,200)\pos(1901.334,1825.333)}数据确实已经结构化了,但当然还有forensic analysts开发的
#640:07:40.360:07:56.74Enderman-C
{\fad(200,200)\pos(1877.334,2110.666)}更便捷的在线视图可供使用。你只需复制、粘贴并运行SQL查询即可
#650:07:57.960:08:10.79Enderman-C
{\fad(200,200)\pos(1888.001,475.999)}我刚才执行的查询将所有数据库内容编译成了一份简洁的小表格,只包含了最重要的信息
#660:08:17.780:08:30.59Enderman-C
{\fad(200,200)\pos(1885.334,161.332)}我在数据库里没找到多少东西,只有动态磁贴。看看WAL文件能不能
#670:08:17.780:08:30.59Enderman-C
{\fad(200,200)\pos(1904.001,459.999)}提供些线索。我们需要运行一个walitean的分支来恢复未提交的数据
#680:08:31.360:08:44.19Enderman-C
{\fad(200,200)\pos(1904.001,179.999)}需要这个分支的原因是整数字节序被弄乱了
#690:08:31.360:08:44.19Enderman-C
{\fad(200,200)\pos(1885.334,473.332)}而Brian Maloney专门为此用例进行了分支。遗憾的是,它是用Python 2编写的
#700:08:45.260:08:58.11Enderman-C
{\fad(200,200)\pos(1888.001,177.332)}它报错了,提示我文件格式无效。这让我思考了一会儿
#710:08:45.260:08:58.11Enderman-C
{\fad(200,200)\pos(1893.334,465.332)}但随后我意识到这意味着WAL文件是空的,因此格式无效
#720:09:02.510:09:15.31Enderman-C
{\fad(200,200)\pos(1922.667,179.999)}我决定迅速填充我的WAL文件。未完成的事务总是要碰运气的
#730:09:02.510:09:15.31Enderman-C
{\fad(200,200)\pos(1928,465.332)}还记得我怎么划掉通知的吗?就是那时候它们被移除了
#740:09:29.440:09:39.73Enderman-C
{\fad(200,200)\pos(1928,179.999)}现在好多了。WAL文件中的事务已添加到新数据库
#750:09:29.440:09:39.73Enderman-C
{\fad(200,200)\pos(1938.667,457.332)}我们现在可以读取了。字段名称仍然未知,但这不成问题
#760:09:56.290:10:15.86Enderman-C
{\fad(200,200)\pos(1898.667,1817.332)}如你所见,表字段虽未知,但它们始终按固定顺序排列
#770:09:56.290:10:15.86Enderman-C
{\fad(200,200)\pos(1901.334,2118.666)}因此我们可以使用另一条预制SQL查询来优雅地输出刚刚揭示的内容
#780:10:18.090:10:38.28Enderman-C
{\fad(200,200)\pos(1901.334,2118.666)}查询结果井然有序。最棒的是,我们还能用通知可视化工具回放这些提示信息!
#790:11:00.330:11:13.78Enderman-C
{\fad(200,200)\pos(1925.334,1833.333)}以上就是本视频的全部内容!我们已成功从目标机器恢复了Toast通知
#800:11:00.330:11:13.78Enderman-C
{\fad(200,200)\pos(1920.001,2105.333)}希望这个视频能对从事取证工作的各位有所帮助
#810:11:14.480:11:27.96Enderman-C
{\fad(200,200)\pos(1933.334,1833.333)}非常感谢观看!希望能和我一样享受制作这个视频的乐趣
#820:11:14.480:11:27.96Enderman-C
{\fad(200,200)\pos(1936.001,2100)}如果有话要说,请给视频评价并留下评论。保重!
#830:11:02.910:11:06.91Enderman-C
{\fad(200,200)\pos(1909.333,220)}原标题:The Secrets of Windows Notifications 原作者:Enderman
#840:11:07.190:11:11.19Enderman-C
{\fad(200,200)\pos(1909.333,220)}原视频上传日期:2025年5月8日
#850:11:29.740:11:49.33Enderman-C
{\fad(200,200)\fscx185\fscy188\pos(1994.666,726.666)}在 Youtube 上关注
#860:11:30.830:11:34.83Enderman-C
{\fad(200,200)\pos(1973.333,1052)}翻译/压制/字幕制作:HAF半个水果
#870:11:35.160:11:40.16Enderman-C
{\fad(200,200)\pos(1914.666,1113.333)}翻译质量权威评价:原来25年就有小拉即用机翻糊弄人了\N
\N
向所有字幕制作及相关人员道一声辛苦了 (*ˊᗜˋ*)/ᵗᑋᵃᐢᵏ ᵞᵒᵘ*\N
感谢字幕组的默默耕耘,你们的每一行字都能让更多人能够跨越语言障碍,享受精彩的内容
#880:11:37.860:11:46.03Enderman-C
{\fad(200,200)}如果你喜欢这个视频,请多多支持和评论哒~ o((>ω< ))o
#890:11:40.480:11:44.48Enderman-C
{\fad(200,200)\pos(1973.333,1052)}字幕制作不易,喜欢的话支持一下我吧!